<?php

require_once 'database/DBConnection.php';

class LoginHandler {
	//konstanter
	const User = "user";
	const Password = "password";
	private $DBConnection = NULL;
	
	public function __construct(DBConnection $connection){
		$this->DBConnection = $connection;
	}
	
	
	//Är inloggad om sessionen har rätt userName
	public function IsLoggedIn() {
		if (isset($_SESSION[self::User])) {
			return TRUE;
		}
	}
	
	// Returnerar sessionens användarnamn
	public function GetLoggedInUserName() {
		$user = $_SESSION[self::User];
		return $user->m_username;
	}

	public function GetLoggedInUserID() {
		$user = $_SESSION[self::User];
		return $user->pk;
	}
	
	//Inloggad i databasen när användar och lösen är samma...
	public function DoLoginDB($name, $password) {
		$ret = array();
		
		$sql = "SELECT * FROM user WHERE m_username = ?  AND m_password = ?";

		$stmt = $this->DBConnection -> Prepare($sql);
		
		//binder två strängar till name och password
		$stmt->bind_param("ss", $name, $password);
		
		if ($stmt === FALSE) {
			LogHandler::logError ("Prepare av '$sql' misslyckades...");
			//echo("prepare of '$sql' failed " . $DBConnection -> error);
			return false;
		}

		$stmt -> execute();

		// Istället för get_result...
		$ret = $this->get($stmt);
		
		if($ret){
			if($ret->m_password === $password){
				return $ret;
			}
		}
		$stmt -> close();

		return false;
	}
	
	public function get($stmt){
		$ret = array();
		$user = NULL;
		//Måste stämma överens med tabellen i databasen
		$stmt->bind_result($pk, $m_username, $m_email, $m_password);
		
		while ($stmt->fetch()) {
			
			$user = new User();
			$user->pk =$pk;
			$user->m_username =$m_username;
			$user->m_email=$m_email;
			$user->m_password=$m_password;

        	$ret[] = $user;
    	}
		return $user;
	}
	

	//Logga in i databasen
	public function DoLogin($name, $password) {
		$userExists = $this -> DoLoginDB($name, $password);

		//Sätter sessionen om användaren finns
		if ($userExists != NULL) {
			$_SESSION[self::User] = $userExists;
			$_SESSION[self::Password] = $password;

			return TRUE;
		} else {
			return FALSE;
		}

	}

	//loggar ut sessionen
	public function DoLogout() {
		unset($_SESSION[self::User]);
	}

	//--------------------------------Test--------------------------------------------
	public function Test() {
		//-------------------Försätter mig i utloggat tillstånd----------------
		$this -> DoLogout();

		//Kollar om jag är inloggad (vilket jag inte borde vara)
		if ($this -> IsLoggedIn()) {
			LogHandler::logError("INLOGGAD fast jag inte borde vara det!");
			return FALSE;
			//Annars är jag fortfarande inte inloggad (vilket jag inte borde vara)
		}

		//loggar in med FEL lösen
		if ($this -> DoLogin('karolina', 'fel lösenord')) {
			LogHandler::logError("testar Dologin med FEL anv. lös och den returerar true vilket den inte borde)");
			return FALSE;
		}

		//Kollar om jag är inloggad (vilket jag inte borde vara)
		if ($this -> IsLoggedIn()) {
			LogHandler::logError("Kollar om jag är inloggad (vilket jag inte borde vara)");
			return FALSE;
			//Annars är jag fortfarande inte inloggad (vilket jag inte borde vara)
		}

		//-------------------Loggar ut---------------------
		$this -> DoLogout();
		//För säkerhets skull...

		if (!$this -> DoLogin('klas', 'klas')) {
			LogHandler::logError("testar DoLogin skillt från rätt anv. lös VERSION2");
			return FALSE;
		}

		//Kollar om jag är inloggad (vilket JAG BORDE VARA HÄR...)
		if ($this -> IsLoggedIn() == false) {
			LogHandler::logError("Fel på isloggedin, efter dologin med rätt uppgifter!");
			return FALSE;
			//Annars är jag fortfarande inte inloggad
		}
		//-------------------Loggar ut---------------------
		$this -> DoLogout();
		//För säkerhets skull...

		//Kollar om jag är inloggad (vilket jag inte borde vara)
		if ($this -> IsLoggedIn()) {
			LogHandler::logError("INLOGGAD fast jag inte borde vara det!");
			return FALSE;
			//Annars är jag fortfarande inte inloggad (vilket jag inte borde vara)
		}

		/*
		 $this -> DoLogout();

		 if ($this -> DoLoginDB($name, $password)==TRUE) {
		 echo "</br>(testar rätt anv och lösen med DoLoginDB)";
		 return FALSE;
		 }
		 */

		return TRUE;

	}

}
